package com.cskaoyan.javase.array._4exception._2null;
/**
 * NullPointerException：空指针异常
 *
 * 产生原因：
 * 引用数据类型的引用取值是可以等于null的，引用等于null说明该引用没有指向任何对象，一旦使用引用操作对象，因为对象根本不存在，程序就会运行出错，抛出空指针异常
 *
 * 空指针异常不是专属于数组会产生的异常，而是所有引用数据类型都有可能产生的异常。
 * 空指针异常（NullPointerExceptionE），简称NPE，是Java之中最负盛名的异常，没有之一。以后大家会天天和引用数据类型打交道，也会每天和空指针异常打交道。
 * 空指针异常在多数情况下是有害的，会导致程序意外终止，避免空指针异常是Java程序员的必修课之一。
 *
 * Java语法本身提供了很多手段去避免空指针异常，也存在很多的编程技巧来避免空指针异常
 * 但是最最常见，也最有效的避免手段是if判断
 * 判断该引用不等于null后再去使用该引用
 *
 *
 * 我们在开发时，要明确知道程序中的引用哪里会指向null，哪里完全不会指向null，对于：
 * 那些逻辑上，可能会指向null的引用，要在使用前慎重判断。如果等于null，需要做出相应处理（反正不能访问对象），判断不为null之后才能使用该引用访问对象。
 * 那些逻辑上，完全不可能等于null的引用，就不应该做判断了。一旦程序抛出空指针异常，要去排查为什么引用会等于null，然后修正程序。
 *
 * @since 10:48
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = null;
        // Dereference of 'arr' will produce 'NullPointerException'
        // System.out.println(arr.length);

        if (arr != null){
            System.out.println(arr.length);
        }

        System.out.println("hello world!");

        String str = null;
        System.out.println(str.length());

        // 上条代码已经产生异常，程序已经终止了，该行不会执行
        System.out.println(arr.length);
    }
}
